gdk/surface: Replace move_to_rect() with GdkPopupLayout based API
authorJonas Ådahl <jadahl@gmail.com>
Sun, 16 Feb 2020 11:59:24 +0000 (12:59 +0100)
committerJonas Ådahl <jadahl@gmail.com>
Wed, 19 Feb 2020 08:47:18 +0000 (09:47 +0100)
commitca71119a40ac9b196700855dac6484f4e198bdb1
tree7d5a2cc24a6d0f9ee5ffb7712e5860a0becca9d3
parent37f4c644d34e77d076a818854e2c3467b2b14b54
gdk/surface: Replace move_to_rect() with GdkPopupLayout based API

Replace the gdk_surface_move_to_rect() API with a new GdkSurface
method called gdk_surface_present_popup() taking a new GdkPopupLayout
object describing how they should be laid out on screen.

The layout properties provided are the same as the ones used with
gdk_surface_move_to_rect(), except they are now set up using
GdkPopupLayout.

Calling gdk_surface_present_popup() will either show the popup at the
position described using the popup layout object and a new unconstrained
size, or reposition it accordingly.

In some situations, such as when a popup is set to autohide, presenting
may immediately fail, in case the grab was not granted by the display
server.

After a successful present, the result of the layout can be queried
using the following methods:

 * gdk_surface_get_position() - to get the position relative to its
   parent
 * gdk_surface_get_width() - to get the current width
 * gdk_surface_get_height() - to get the current height
 * gdk_surface_get_rect_anchor() - to get the anchor point on the anchor
   rectangle the popup was effectively positioned against given
   constraints defined by the environment and the layout rules provided
   via GdkPopupLayout.
 * gdk_surface_get_surface_anchor() - the same as the one above but for
   the surface anchor.

A new signal replaces the old "moved-to-rect" one -
"popup-layout-changed". However, it is only intended to be emitted when
the layout changes implicitly by the windowing system, for example if
the monitor resolution changed, or the parent window moved.
16 files changed:
docs/reference/gdk/gdk4-sections.txt
gdk/broadway/gdksurface-broadway.c
gdk/gdk-autocleanup.h
gdk/gdkpopuplayout.c [new file with mode: 0644]
gdk/gdkpopuplayout.h [new file with mode: 0644]
gdk/gdksurface.c
gdk/gdksurface.h
gdk/gdksurfaceprivate.h
gdk/meson.build
gdk/quartz/gdksurface-quartz.c
gdk/wayland/gdkdevice-wayland.c
gdk/wayland/gdksurface-wayland.c
gdk/win32/gdksurface-win32.c
gdk/x11/gdksurface-x11.c
gtk/gtkpopover.c
gtk/gtktooltipwindow.c